﻿
namespace UCL.Data
{
    /// <summary>
    /// SQL语句模板
    /// <para>用于提供数据库产品特性SQL语句,如创建表,修改字段等标准语句</para>
    /// </summary>
    /// <remarks>2015-1-21 by sutroon 由IDatabaseHelper抽取而来.</remarks>
    public struct SqlTemplate
    {
        #region 数据表

        /// <summary>
        /// 返回创建存储过程的范例Sql
        /// </summary>
        public string CreateTableSql { get; set; }

        /// <summary>
        /// 返回重命名表的命令
        /// <para>返回的语句中包含2个数据表占位符{0}{1},{0}=旧名称,{1}=新名称</para>
        /// </summary>
        public string RenameTableSql { get; set; }

        /// <summary>
        /// 返回删除表命令
        /// <para>返回的语句中包含2个数据表占位符{0}</para>
        /// </summary>
        public string DropTableSql { get; set; }

        /// <summary>
        /// 返回用于显示数据表结构的范例Sql
        /// <para>返回的语句中包含1个数据表占位符{0}</para>
        /// <para>SQL Server返回表格式为 int:ColOrder=字段序号,string:Name=字段名,int:IsIdentity=标识(0|1),string:KeyName=主键名称(DbNul),string:DbType=类型,int:Length=占用字节数,int:Precision=长度,int:XScale=小数位数(DbNull),int:AllowDBNull=允许空(0|1),stringDefaultValue=默认值(DbNull),string:Common=字段说明(DbNull)</para>
        /// <para>MySQL返回表格式为 string:Field=字段名称, string:Type=数据类型(varchar(255),int(11),smallint(6)), string:Null=是否为空(YES|NO), string:Key=主键标识(PRI|UNI|''), string:Default=默认值(NULL|CURRENT_TIMESTAMP), string:Extra=字段扩展(auto_increment|on update CURRENT_TIMESTAMP|'')</para>
        /// </summary>
        /// <example>DESC {0}</example>
        public string DescribeTableSql { get; set; }

        /// <summary>
        /// 返回用于清空/重置数据表的范例Sql
        /// <para>返回的语句中包含1个数据表占位符{0}</para>
        /// </summary>
        public string TruncateTableSql { get; set; }
        #endregion

        #region 存储过程
        /// <summary>
        /// 返回创建存储过程的范例Sql
        /// <para>返回的语句中包含1个数据表占位符{0}</para>
        /// </summary>
        public string CreateProcedureSql { get; set; }

        /// <summary>
        /// 返回重命名存储过程的命令
        /// <para>返回的语句中包含2个数据表占位符{0}{1},{0}=旧名称,{1}=新名称</para>
        /// </summary>
        public string RenameProcedureSql { get; set; }

        /// <summary>
        /// 返回丢弃存储过程的命令
        /// </summary>
        public string DropProcedureSql { get; set; }
        #endregion

        #region 函数
        /// <summary>
        /// 返回创建函数的范例Sql
        /// <para>返回的语句中包含1个数据表占位符{0}</para>
        /// </summary>
        public string CreateFunctionSql { get; set; }

        /// <summary>
        /// 返回重命名函数的命令
        /// <para>返回的语句中包含2个数据表占位符{0}{1},{0}=旧名称,{1}=新名称</para>
        /// </summary>
        public string RenameFunctionSql { get; set; }

        /// <summary>
        /// 返回丢弃函数的命令
        /// </summary>
        public string DropFunctionSql { get; set; }
        #endregion
        
        #region 视图

        public string CreateViewSql { get; set; }

        /// <summary>
        /// 返回重命名视图的命令
        /// <para>返回的语句中包含2个数据表占位符{0}{1},{0}=旧名称,{1}=新名称</para>
        /// </summary>
        public string RenameViewSql { get; set; }

        /// <summary>
        /// 返回删除视图的命令
        /// <para>返回的语句中包含1个数据表占位符{0}</para>
        /// </summary>
        public string DropViewSql { get; set; }

        #endregion

        #region 其他对象

        /// <summary>
        /// 返回显示所有数据库的命令
        /// <para>SQL Server返回的表行头为 DATABASE_NAME, DATABASE_SIZE, REMARKS</para>
        /// </summary>
        /// <returns></returns>
        public string ShowDatabasesSql { get; set; }

        /// <summary>
        /// 返回显示所有表的命令
        /// </summary>
        public string ShowTablesSql { get; set; }

        /// <summary>
        /// 返回显示数据表所有字段的命令语句
        /// <para>返回的语句中包含1个数据表占位符{0}</para>
        /// </summary>
        public string ShowFieldsSql { get; set; }

        /// <summary>
        /// 返回表说明文档
        /// <para>返回的语句中包含1个数据表占位符{0}</para>
        /// </summary>
        /// <example>DESC {0}</example>
        public string ShowTableCommonSql { get; set; }

        /// <summary>
        /// 返回显示所有存储过程的命令
        /// </summary>
        /// <returns></returns>
        public string ShowProceduresSql { get; set; }

        /// <summary>
        /// 返回显示所有函数的命令
        /// </summary>
        public string ShowFunctionsSql { get; set; }

        /// <summary>
        /// 返回显示所有视图的命令
        /// <para>*MySQL返回语句中包含1个数据库名称占位符{0}</para>
        /// </summary>
        /// <returns></returns>
        public string ShowViewsSql { get; set; }

        /// <summary>
        /// 返回对应数据库的自动增长字段语句
        /// </summary>
        public string AutoIncrementSql { get; set; }
        #endregion
    }
}
